package com.supconit.kqfx.web.util;

import java.util.Collection;

import com.baidu.yun.core.copyfile.BaiduPushConstants;
import com.baidu.yun.core.copyfile.PushClientException;
import com.baidu.yun.core.log.YunLogEvent;
import com.baidu.yun.core.log.YunLogHandler;
import com.baidu.yun.push.auth.PushKeyPair;
import com.baidu.yun.push.client.BaiduPushClient;
import com.baidu.yun.push.exception.PushServerException;
import com.baidu.yun.push.model.PushBatchUniMsgRequest;
import com.baidu.yun.push.model.PushBatchUniMsgResponse;
import com.baidu.yun.push.model.PushMsgToSingleDeviceRequest;
import com.baidu.yun.push.model.PushMsgToSingleDeviceResponse;
import org.directwebremoting.Browser;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MsgPushUtil {
	
	
	private transient static final Logger logger = LoggerFactory.getLogger(MsgPushUtil.class);
	
	/**
	 * 将信息推送到前台，然后前台同DWR框架调用信息
	 * @param msg
	 */
	public static void send(final String msg){
		Runnable run = new Runnable() {
			private ScriptBuffer bf = new ScriptBuffer();
			@Override
			public void run() {
				// TODO Auto-generated method stub
				//设置需要调用的JS和参数
				bf.appendCall("show", msg);
				//得到所有的ScriptSession
				Collection<ScriptSession> sessions = Browser.getTargetSessions();
				//遍历所有的session
				for(ScriptSession session : sessions){
					session.addScript(bf);
				}
			}
		};
		try {
			//执行推送
			Browser.withAllSessions(run);
		} catch (Exception e) {
			logger.info("无页面推送:"+e.toString());
			e.printStackTrace();
		}
	}


	/**
	 * 推送单个android设备
	 * @param messsage 推送的消息
	 * @param channelId 手机的通道
	 * @param apiKey
	 * @param secretKey
	 */
	public  static final void pushSignal(String messsage, String channelId, String apiKey,String secretKey){
		/**
		 * 1. 创建PushKeyPair
		 *用于app的合法身份认证
		 *apikey和secretKey可在应用详情中获取
		 */
		PushKeyPair pair = new PushKeyPair(apiKey,secretKey);
		// 2. 创建BaiduPushClient，访问SDK接口
		BaiduPushClient pushClient = new BaiduPushClient(pair, BaiduPushConstants.CHANNEL_REST_URL);
		// 3. 注册YunLogHandler，获取本次请求的交互信息
		pushClient.setChannelLogHandler (new YunLogHandler() {
			@Override
			public void onHandle (YunLogEvent event) {
				logger.info(event.getMessage());
			}
		});
		try {
			// 4. 设置请求参数，创建请求实例
			//设置消息的有效时间,单位秒,默认3600*5.
			//设置消息类型,0表示透传消息,1表示通知,默认为0.
			//设置设备类型，deviceType => 1 for web, 2 for pc,
			//3 for android, 4 for ios, 5 for wp.
			PushMsgToSingleDeviceRequest request = new PushMsgToSingleDeviceRequest().
					addChannelId(channelId).addMsgExpires(new Integer(3600)).
					addMessageType(1).
					addMessage(messsage).
					addDeviceType(3);
			// 5. 执行Http请求
			PushMsgToSingleDeviceResponse response = pushClient.pushMsgToSingleDevice(request);
			// 6. Http请求返回值解析
			logger.info("msgId: " + response.getMsgId()
					+ ",sendTime: " + response.getSendTime());
		} catch (Exception e) {
			//ERROROPTTYPE 用于设置异常的处理方式 -- 抛出异常和捕获异常,
			//'true' 表示抛出, 'false' 表示捕获。
			e.printStackTrace();
		}
	}

	/**
	 * 发送到批量手机上
	 * @param message 发送的消息
	 * @param channelId 推送的key信息
	 * @param apiKey
	 * @param secretKey
	 * @param type 设置为固定值 3
	 */
	public  static  final void pushBatchAndorid(final String message, final String[] channelId, final String apiKey,final String secretKey,final int type){
		ThreadPollUtil.getPool().execute(new Runnable() {
			@Override
			public void run() {
				/**
				 * 1. 创建PushKeyPair
				 *用于app的合法身份认证
				 *apikey和secretKey可在应用详情中获取
				 */
				logger.info("====================开始进行百度云推送==============");
				PushKeyPair pair = new PushKeyPair(apiKey,secretKey);
				// 2. 创建BaiduPushClient，访问SDK接口
				BaiduPushClient pushClient = new BaiduPushClient(pair, BaiduPushConstants.CHANNEL_REST_URL);
				// 3. 注册YunLogHandler，获取本次请求的交互信息
				pushClient.setChannelLogHandler (new YunLogHandler () {
					@Override
					public void onHandle (YunLogEvent event) {
						logger.info(event.getMessage());
					}
				});
				try {
					// 4. 设置请求参数，创建请求实例
					//设置消息的有效时间,单位秒,默认3600*5.
					//设置消息类型,0表示透传消息,1表示通知,默认为0.
					//设置设备类型，deviceType => 1 for web, 2 for pc,
					//3 for android, 4 for ios, 5 for wp.
					PushBatchUniMsgRequest request = new PushBatchUniMsgRequest().
							addChannelIds(channelId).
							addMsgExpires(new Integer(3600)).
							addMessageType(1).
							addMessage(message).
							addDeviceType(type);
					// 5. 执行Http请求
					PushBatchUniMsgResponse response = pushClient.pushBatchUniMsg(request);
					// 6. Http请求返回值解析
					logger.info("msgId: " + response.getMsgId()
							+ ",sendTime: " + response.getSendTime());
					logger.info("=====================百度云推送成功============");
				} catch (Exception e) {
					//ERROROPTTYPE 用于设置异常的处理方式 -- 抛出异常和捕获异常,
					//'true' 表示抛出, 'false' 表示捕获。
					e.printStackTrace();
				}
			}
		});
	}


}



//
//	public  static  final void pushBatchIos(final String message, final String[] channelIds, final String apiKey,final String secretKey,final int type){
//		ThreadPollUtil.getPool().execute(new Runnable() {
//			@Override
//			public void run() {
//				/**
//				 * 1. 创建PushKeyPair
//				 *用于app的合法身份认证
//				 *apikey和secretKey可在应用详情中获取
//				 */
//				logger.info("========开始进行百度云推送=========");
//
//				PushKeyPair pair = new PushKeyPair(apiKey,secretKey);
//
//				// 2. 创建BaiduPushClient，访问SDK接口
//				BaiduPushClient pushClient = new BaiduPushClient(pair, BaiduPushConstants.CHANNEL_REST_URL);
//
//				// 3. 注册YunLogHandler，获取本次请求的交互信息
//				pushClient.setChannelLogHandler (new YunLogHandler () {
//					@Override
//					public void onHandle (YunLogEvent event) {
//						logger.info(event.getMessage());
//					}
//				});
//				try {
//					// 4. 设置请求参数，创建请求实例
//					//设置消息的有效时间,单位秒,默认3600*5.
//					//设置消息类型,0表示透传消息,1表示通知,默认为0.
//					//设置设备类型，deviceType => 1 for web, 2 for pc,
//					//3 for android, 4 for ios, 5 for wp.
//					for(String channelId:channelIds){
//						PushMsgToSingleDeviceRequest request = new PushMsgToSingleDeviceRequest().
//								addChannelId(channelId).
//								addMsgExpires(new Integer(3600)).
//								addMessageType(1).
//								addMessage(message).
//								addDeployStatus(2).
//								addDeviceType(type);
//						// 5. 执行Http请求
//						PushMsgToSingleDeviceResponse response = pushClient.pushMsgToSingleDevice(request);
//						// 6. Http请求返回值解析
//						logger.info("msgId: " + response.getMsgId()
//								+ ",sendTime: " + response.getSendTime());
//						logger.info("======百度云推送成功======");
//					}
//				} catch (PushServerException e) {
//					logger.info("==========百度云推送失败=======");
//					if (BaiduPushConstants.ERROROPTTYPE) {
//
//					} else {
//						logger.info(String.format(
//								"requestId: %d, errorCode: %d, errorMsg: %s",
//								e.getRequestId(), e.getErrorCode(), e.getErrorMsg()));
//					}
//				} catch (com.baidu.yun.push.exception.PushClientException e) {
//					e.printStackTrace();
//				}
//
//			}
//		});
//	}

